﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessLayer;

namespace BusinessLogicLayer
{
    public class NhanVienBLL
    {
        QuanLyChamCongDataContext DB = new QuanLyChamCongDataContext();
        
        public List<NHANVIEN> LayTatCa()
        {
            return DB.NHANVIENs.ToList();
        }
        public List<CT_DANGNHAP> ThongTinDangNhap()
        {
            return DB.CT_DANGNHAPs.ToList();
        }

        public List<NHANVIEN> TimKiem(int manv)
        {
            return DB.NHANVIENs.Where(b => b.MaNV == manv).ToList();
        }

        public int LayMaNVTT()
        {
            NHANVIEN nv = (from a in DB.NHANVIENs
                           orderby a.MaNV descending
                           select a).FirstOrDefault();
            return nv.MaNV + 1;
        }

        public List<DGVNHANVIEN> DSNhanVien(int mapb, string name, int tt)
        {
            //string ma = manv.ToString();
            if (mapb != 0 && name == "")
            {
                List<DGVNHANVIEN> nv = (from a in DB.NHANVIENs
                                        where a.MaPB == mapb && a.CT_DANGNHAPs.Single().Active == tt
                                        select new DGVNHANVIEN()
                                        {
                                            MaNV = a.MaNV,
                                            TenNV = a.HoTen.Trim(),
                                            GioiTinh = a.GioiTinh,
                                            NgaySinh = a.NgaySinh ?? DateTime.MaxValue,
                                            SoDT = a.SoDT,
                                            Email = a.Email.Trim(),
                                            QuocTich = a.QuocTich,
                                            CMND = a.CMND,
                                            BangCap = a.BANGCAP.TenBangCap,
                                            LoaiNV = a.LOAINV.TenLoaiNV,
                                            NgayVaoLam = a.NgayVaoLam ?? DateTime.MaxValue
                                        }).ToList();
                return nv;
            }
            if (mapb == 0 && name == "")
            {
                List<DGVNHANVIEN> nv = (from a in DB.NHANVIENs
                                        where a.CT_DANGNHAPs.Single().Active == tt
                                        select new DGVNHANVIEN()
                                        {
                                            MaNV = a.MaNV,
                                            TenNV = a.HoTen,
                                            GioiTinh = a.GioiTinh,
                                            NgaySinh = a.NgaySinh ?? DateTime.MaxValue,
                                            SoDT = a.SoDT,
                                            Email = a.Email,
                                            QuocTich = a.QuocTich,
                                            CMND = a.CMND,
                                            BangCap = a.BANGCAP.TenBangCap,
                                            LoaiNV = a.LOAINV.TenLoaiNV,
                                            NgayVaoLam = a.NgayVaoLam ?? DateTime.MaxValue
                                        }).ToList();
                return nv;
            }
            if (mapb == 0 && name != "")
            {
                List<DGVNHANVIEN> nv = (from a in DB.NHANVIENs
                                        where a.HoTen.Contains(@name) && a.CT_DANGNHAPs.Single().Active == tt
                                        select new DGVNHANVIEN()
                                        {
                                            MaNV = a.MaNV,
                                            TenNV = a.HoTen,
                                            GioiTinh = a.GioiTinh,
                                            NgaySinh = a.NgaySinh ?? DateTime.MaxValue,
                                            SoDT = a.SoDT,
                                            Email = a.Email,
                                            QuocTich = a.QuocTich,
                                            CMND = a.CMND,
                                            BangCap = a.BANGCAP.TenBangCap,
                                            LoaiNV = a.LOAINV.TenLoaiNV,
                                            NgayVaoLam = a.NgayVaoLam ?? DateTime.MaxValue
                                        }).ToList();
                return nv;
            }
            else
            {
                List<DGVNHANVIEN> nv = (from a in DB.NHANVIENs
                                        where a.HoTen.Contains(@name) && a.MaPB == mapb && a.CT_DANGNHAPs.Single().Active == tt
                                        select new DGVNHANVIEN()
                                        {
                                            MaNV = a.MaNV,
                                            TenNV = a.HoTen,
                                            GioiTinh = a.GioiTinh,
                                            NgaySinh = a.NgaySinh ?? DateTime.MaxValue,
                                            SoDT = a.SoDT,
                                            Email = a.Email,
                                            QuocTich = a.QuocTich,
                                            CMND = a.CMND,
                                            BangCap = a.BANGCAP.TenBangCap,
                                            LoaiNV = a.LOAINV.TenLoaiNV,
                                            NgayVaoLam = a.NgayVaoLam ?? DateTime.MaxValue
                                        }).ToList();
                return nv;
            }
        }

        public List<NHANVIEN2> DSNhanVien2(int mapb, string name)
        {
            //string ma = manv.ToString();
            if (mapb != 0 && name == "")
            {
                List<NHANVIEN2> nv = (from a in DB.NHANVIENs
                                      where a.MaPB == mapb
                                      select new NHANVIEN2()
                                      {
                                          MaNV = a.MaNV,
                                          HoTen = a.HoTen,
                                      }).ToList();
                return nv;
            }
            if (mapb == 0 && name == "")
            {
                List<NHANVIEN2> nv = (from a in DB.NHANVIENs
                                      select new NHANVIEN2()
                                      {
                                          MaNV = a.MaNV,
                                          HoTen = a.HoTen,
                                      }).ToList();
                return nv;
            }
            if (mapb == 0 && name != "")
            {
                List<NHANVIEN2> nv = (from a in DB.NHANVIENs
                                      where a.HoTen.Contains(@name)
                                      select new NHANVIEN2()
                                      {
                                          MaNV = a.MaNV,
                                          HoTen = a.HoTen,
                                      }).ToList();
                return nv;
            }
            else
            {
                List<NHANVIEN2> nv = (from a in DB.NHANVIENs
                                      where a.HoTen.Contains(@name) && a.MaPB == mapb
                                      select new NHANVIEN2()
                                      {
                                          MaNV = a.MaNV,
                                          HoTen = a.HoTen,
                                      }).ToList();
                return nv;
            }
        }

        public int timTruongPhongBanTheoMaPB(int _MaPB)
        {
            var ctr = (from a in DB.NHANVIENs
                       from b in DB.CT_ROLEs
                       where a.MaNV == b.MaNV && b.MaRole == 2 && a.MaPB == _MaPB
                       select new
                       {
                           b.MaNV,
                           b.MaRole,
                       }).FirstOrDefault();
            return ctr.MaNV;

        }

        public int TimPhongBan(int _manv)
        {
            NHANVIEN n = DB.NHANVIENs.SingleOrDefault(a => a.MaNV == _manv);
            return (int)n.MaPB;
        }
        public void ThemNV(NHANVIEN nhanvien)
        {
            DB.NHANVIENs.InsertOnSubmit(nhanvien);
            DB.SubmitChanges();
        }

        public int KiemTraTaiKhoan(string TenDangNhap, string MatKhau)
        {
           // int manv;
            if (DB.CT_DANGNHAPs.Any(a => a.TenDangNhap == TenDangNhap))
            {
                CT_DANGNHAP tk = DB.CT_DANGNHAPs.FirstOrDefault(a => a.TenDangNhap == TenDangNhap && a.MatKhau == MatKhau && a.Active == 1);
                if (tk != null)
                {
                    return Convert.ToInt32(tk.MaNV);
                }
                else
                {
                    return 0;
                }
                
            }
            else return 0;

        }

        //public int 

        public string KiemTraTonTai(string cmnd, string email, string sdt, int maNV)
        {
            if (DB.NHANVIENs.Any(a => a.MaNV == maNV))
                return "Mã Nhân Viên";
            if (DB.NHANVIENs.Any(b => b.CMND == cmnd))
                return "Số Chứng Minh Nhân Dân";
            if (DB.NHANVIENs.Any(c => c.Email == email))
                return "Email";
            if (DB.NHANVIENs.Any(d => d.SoDT == sdt))
                return "Số Điện Thoại";
            else
                return null;

        }

        public string KiemTraTonTaix(string cmnd, string email, string sdt, int maNV)
        {

            if (DB.NHANVIENs.Any(b => b.CMND == cmnd && b.MaNV != maNV))
                return "Số Chứng Minh Nhân Dân";
            if (DB.NHANVIENs.Any(c => c.Email == email && c.MaNV != maNV))
                return "Email";
            if (DB.NHANVIENs.Any(d => d.SoDT == sdt && d.MaNV != maNV))
                return "Số Điện Thoại";
            else
                return null;

        }

        public NHANVIEN LayNhanVien(int manv)
        {
            NHANVIEN nv = DB.NHANVIENs.SingleOrDefault(a => a.MaNV == manv);
            if (nv != null)
                return nv;
            else return null;
        }

        public void SuaNV(NHANVIEN nv)
        {
            NHANVIEN nvo = DB.NHANVIENs.Single(a => a.MaNV == nv.MaNV);
            nvo.HoTen = nv.HoTen;
            nvo.NgaySinh = nv.NgaySinh;
            nvo.GioiTinh = nv.GioiTinh;
            nvo.QuocTich = nv.QuocTich;
            nvo.CMND = nv.CMND;
            nvo.SoDT = nv.SoDT;
            nvo.Email = nv.Email;
            nvo.ThuongTru = nv.ThuongTru;
            nvo.TamTru = nv.TamTru;
            nvo.HocVan = nv.HocVan;
            nvo.MaBangCap = nv.MaBangCap;
            nvo.NoiCap = nv.NoiCap;
            nvo.MaLoaiNV = nv.MaLoaiNV;
            nvo.MucLuong = nv.MucLuong;
            nvo.NgayVaoLam = nv.NgayVaoLam;
            nvo.MaPB = nv.MaPB;
            DB.SubmitChanges();
        }

        public void XoaNV(int maNV)
        {
            NHANVIEN nv = DB.NHANVIENs.Single(a => a.MaNV == maNV);
            DB.NHANVIENs.DeleteOnSubmit(nv);
            DB.SubmitChanges();
        }

        public string LayPBTuNV(int manv)
        {
            NHANVIEN nv = DB.NHANVIENs.SingleOrDefault(a => a.MaNV == manv);
            if (nv.MaPB != null)
            {
                return nv.PHONGBAN.TenPB;
            }
            else
            {
                return "";
            }
        }

        public int LayMaPBTuNV(int manv)
        {
            NHANVIEN n = DB.NHANVIENs.SingleOrDefault(a => a.MaNV == manv);
            if (n.MaPB != null)
                return (int)n.MaPB;
            else
                return 0;
        }

        public bool KiemTraTruongPhong(int _maNV)
        {
            if (DB.NHANVIENs.Single(a => a.MaNV == _maNV).CT_ROLEs.Any(b => b.MaRole == 2))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool KiemTraNhanSu(int _maNV)
        {
            if (DB.NHANVIENs.Single(a => a.MaNV == _maNV).CT_ROLEs.Any(b => b.MaRole == 1 || b.MaRole == 5))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void UpdateNPTN(NHANVIEN _nv)
        {
            NHANVIEN nv = DB.NHANVIENs.SingleOrDefault(a => a.MaNV == _nv.MaNV);
            nv.SoNgayPhepThuongNien = _nv.SoNgayPhepThuongNien;
            DB.SubmitChanges();
        }
    }
}
